package com.chenfan.mcn.model.vo;

import com.alibaba.fastjson.annotation.JSONField;
import com.chenfan.mcn.enums.IntentionOrderStatusEnum;
import com.chenfan.mcn.utils.DateUtil;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 主播排期日历VO
 * @author wulg
 * @date 2022/10/28
 */
@Data
public class AnchorSchedulingCalendarVO implements Serializable {

    private static final long serialVersionUID = 5532301090692395526L;


    /**
     * 意向单金额合计
     */
    private BigDecimal totalOrderAmount;

    /**
     * 意向单状态计数
     */
    private Collection<IntentionOrderStatusSummaryVO> statusSummaryList;

    /**
     * 意向单数据日历汇总
     */
    private Collection<IntentionOrderCalendarSummary> calendarSummaryList;

    public static AnchorSchedulingCalendarVO defaultAnchorSchedulingCalendarVO(Date month) {
        AnchorSchedulingCalendarVO vo = new AnchorSchedulingCalendarVO();
        vo.setTotalOrderAmount(BigDecimal.ZERO);
        vo.setStatusSummaryList(Stream.of(IntentionOrderStatusEnum.values())
                .map(e -> new IntentionOrderStatusSummaryVO(e.getCode(), 0L)).collect(Collectors.toList()));
        List<Date> dayList = DateUtil.getAllDayOfMonth(month);
        List<AnchorSchedulingCalendarVO.IntentionOrderCalendarSummary> calendarSummaryList = new ArrayList<>(dayList.size());
        dayList.forEach(day -> {
            AnchorSchedulingCalendarVO.IntentionOrderCalendarSummary calendarSummary = new AnchorSchedulingCalendarVO.IntentionOrderCalendarSummary();
            calendarSummary.setDay(day);
            calendarSummary.setIntentionOrderList(Collections.EMPTY_LIST);
            calendarSummaryList.add(calendarSummary);
        });
        vo.setCalendarSummaryList(calendarSummaryList);
        return vo;
    }

    public static IntentionOrderCalendarSummary newIntentionOrderCalendarSummary() {
        return new IntentionOrderCalendarSummary();
    }

    public static IntentionOrderData newIntentionOrderData() {
        return new IntentionOrderData();
    }


    /**
     * 意向单日历汇总
     */
    @Data
    public static class IntentionOrderCalendarSummary {

        /**
         * 几号
         */
        @JSONField(format = "yyyy-MM-dd")
        private Date day;

        /**
         * 意向单列表
         */
        private List<IntentionOrderData> intentionOrderList;
    }

    /**
     * 意向询单
     */
    @Data
    public static class IntentionOrderData {

        /**
         * 意向ID
         */
        private Long id;

        /**
         * 意向单号
         */
        private String intentionCode;

        /**
         * 状态
         */
        private Integer status;

        /**
         * 状态名称
         */
        private String statusName;

        /**
         * 红人ID
         */
        private Long starId;

        /**
         * 红人昵称
         */
        private String starNickName;

        /**
         * 客户名称
         */
        private String customerName;

        /**
         * 合作产品
         */
        private String productName;

        /**
         * 发布日期
         */
        @JSONField(format = "yyyy-MM-dd")
        private Date publishDate;

        /**
         * 发布形式
         */
        private String publishForm;

        /**
         * 发布形式
         */
        private String publishFormName;

        /**
         * 红人发布平台信息ID
         */
        private Long starPlatformInfoId;

        /**
         * 发布平台
         */
        private String platformId;

        /**
         * 发布平台-名称
         */
        private String platformName;

        /**
         * 红人平台昵称
         */
        private String platNickName;

        /**
         * 刊例价（报价）
         */
        private BigDecimal cardRatePrice;

        /**
         * 内容实际报价（原：本单金额）
         */
        private BigDecimal orderAmount;


        /**
         * 总收入（元）-自动计算
         */
        private BigDecimal totalIncomeAmount;

        /**
         * 内容报价返点比例（%）
         */
        private BigDecimal rebate;

        /**
         * 本单实际优惠比例（%）
         */
        private BigDecimal actualDiscountRatio;

        /**
         * 创建时间
         */
        private Date createDate;
    }
}
